817E - Choosing The Commander - CodeForces Solution


bitmasks data structures trees *2000

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
using namespace std;

const int nmax = 1e5;

int q;

struct trieNode{
    trieNode * nxt[2];
    int nr;
    trieNode() : nr(0) {nxt[0] = nxt[1] = nullptr;}
};

struct trie{
    trieNode * root;
    trie(){
        root = new trieNode;
    }
    void insert(int x, int v){
        trieNode * nod = root;
        for(int i = 26; i >= 0; i--){
            if(nod -> nxt[(x >> i) & 1] == nullptr)
                nod -> nxt[(x >> i) & 1] = new trieNode;
            nod = nod -> nxt[(x >> i) & 1];
            nod -> nr += v;
        }
    }
    int cmp(int x, int l){
        trieNode * nod = root;
        int ans = 0;
        for(int i = 26; i >= 0; i--){
            if((l >> i) & 1){
                ans += (nod -> nxt[((x >> i) & 1)] == nullptr ? 0 : nod -> nxt[((x >> i) & 1)] -> nr);
                nod = nod -> nxt[((x >> i) & 1) ^ 1];
            } 
            else{
                nod = nod -> nxt[((x >> i) & 1)];
            }
            if(nod == nullptr)
                return ans;
        }
        return ans;
    }
};

void solve(){
    trie arb;
    cin >> q;
    while(q--){
        int c;
        cin >> c;
        if(c == 1){
            int p;
            cin >> p;
            arb.insert(p, 1);
        }
        else if(c == 2){
            int p;
            cin >> p;
            arb.insert(p, -1);
        }
        else{
            int p, l;
            cin >> p >> l;
            cout << arb.cmp(p, l) << "\n";
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    // freopen("test.in", "r", stdin);
    // freopen("test.out", "w", stdout);

    int q = 1;
    // cin >> q;
    while(q--){
        solve();
    }
    return 0;
}


Comments

Submit
0 Comments
More Questions

162. Find Peak Element
1529A - Eshag Loves Big Arrays
19. Remove Nth Node From End of List
925. Long Pressed Name
1051. Height Checker
695. Max Area of Island
402. Remove K Digits
97. Interleaving String
543. Diameter of Binary Tree
124. Binary Tree Maximum Path Sum
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts
501A - Contest
160A- Twins
752. Open the Lock
1535A - Fair Playoff
1538F - Interesting Function
1920. Build Array from Permutation
494. Target Sum
797. All Paths From Source to Target
1547B - Alphabetical Strings
1550A - Find The Array
118B - Present from Lena
27A - Next Test
785. Is Graph Bipartite
90. Subsets II
1560A - Dislike of Threes
36. Valid Sudoku
557. Reverse Words in a String III
566. Reshape the Matrix
167. Two Sum II - Input array is sorted